Jak implementovat Drag&Drop

Otázka od: Andreas Bednarek

11. 10. 2002 16:37

Ahoj, lidi.
Poradil by mi někdo, jak implementovat Drag&Drop nebo kde si o tom něco
přečíst?
Konkrétně potřebuju přetahovat položky v TreeView, pak mezi TreeView a ListView
a příp. mezi ListView a jinou Control.
Moc to podle helpu nechápu, teprv začínám.

Díky
Andreas (D4, W98)

Odpovedá: Jan Sebelík

12. 10. 2002 9:02

Odesílatel: Andreas Bednarek <bednarek@digitus.cz>
Poradil by mi někdo, jak implementovat Drag&Drop nebo kde si o tom něco
přečíst?

Nejjednoduseji takto:

Na "source"
DragMode=dmAutomatic

Na "destination"
OnDragOver: nastavit Accept
OnDragDrop: naprogramovat přenesení dat (Source a Destination jsou parametry).

Samozřejmě tyto a další věci školíme  

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================

Odpovedá: Andreas Bednarek

16. 10. 2002 18:59

> Poradil by mi někdo, jak implementovat Drag&Drop nebo kde si o tom něco
přečíst?
>
> Nejjednoduseji takto:
>
> Na "source"
> DragMode=dmAutomatic
>
> Na "destination"
> OnDragOver: nastavit Accept
> OnDragDrop: naprogramovat přenesení dat (Source a Destination jsou
parametry).
>
> Samozřejmě tyto a další věci školíme  


Aha, diky.
A nevite proc mi TreeView zacne Drag hned při OnMouseDown?

Upřesním to:
    nastavím DragMode=dmManual;
    v TreeView.OnMouseDown volám TreeView.BeginDrag(False);
    Tento TreeView je také cílovou komponentou (přetahování TTreeNodes mezi
sebou) tzn. pro něj implementuji i OnDragOver a OnDragDrop.

V okamziku kdy kliknu mysi do TreeView ihned(!) se mi na ukazatel "zachytí"
Selected node (mmj. se vyvolá i OnClick), a pohnu-li myší byť jen o pixel,
vyvolá se OnDragOver.
Vlastně by to moc nevadilo, až na to, že tam vznikají chyby v překreslování
nodů, a pokud cvaknu pravou myší, hned se zobrazí také PopUpMenu, které tam
mám nadefinované, průsvitný přetahovaný node zůstane na jednom místě a
kurzor myši úplně zmizí a už se neukáže! (do té doby, než zobrazím nějaký
jiný formulář aplikace).

Rád bych použil i pravé tlačítko a vůbec je mi tohle chování podezřelé. Např
TreeView v Průzkumníku se tak přece nechová.

Dělám něco špatně? Používám Delphi 4.

díky
Andreas

p.s. Uz jsem o vas slysel  



Odpovedá: Jan Sebelík

17. 10. 2002 12:20

> Odesílatel: Andreas Bednarek <bednarek@digitus.cz>
> A nevite proc mi TreeView zacne Drag hned při OnMouseDown?
> nastavím DragMode=dmManual;
> v TreeView.OnMouseDown volám TreeView.BeginDrag(False);

No, ja jsem si vzdycky vystacil s DragMode=dmAutomatic.
Kdyz na OnMouseDown zavolas BeginDrag, tak se nediv ze ten Drag zacne hned pri
MouseDown.
Asi budes muset nejak lepe identifikovat zacatek Drag.
OnMouseDown si poznamenat, ze mys je dole, OnMouseMove, pokud je mys dole,
teprve BeginDrag.
OnMouseUp ten priznak zase shodit.
Prave proto se tomu vyhybam a radsi se pokusim vystacit s dmAutomatic.

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================

Odpovedá: Roman

17. 10. 2002 14:21

> Odesílatel: Andreas Bednarek <bednarek@digitus.cz>
> A nevite proc mi TreeView zacne Drag hned při OnMouseDown?
> nastavím DragMode=dmManual;
> v TreeView.OnMouseDown volám TreeView.BeginDrag(False);

BeginDrag(false,100)  

Roman
==============================
http://kouzelne.misto.cz


Odpovedá: Andreas Bednarek

17. 10. 2002 21:22

> > A nevite proc mi TreeView zacne Drag hned při OnMouseDown?
> > nastavím DragMode=dmManual;
> > v TreeView.OnMouseDown volám TreeView.BeginDrag(False);
>
> BeginDrag(false,100)  
>

No 100 je trochu moc....  

Diky
Andreas